
import com.sky.chain.data.GoodsData;
import com.sky.chain.model.UserEntity;
import com.sky.chain.service.IProduct;
import com.sky.chain.service.impl.ProductA;
import com.sky.chain.model.GoodsEntity;
import java.util.Map;
import java.util.Scanner;

public class Main {
   Scanner scanner=new Scanner(System.in);
   Map<Integer, GoodsEntity> shopNames;
   IProduct product = new ProductA();

    public static void main(String[] args) {
        Main main = new Main();
        main.index();
    }

    public void index(){
        // 第一步：展示自动售药机商品信息
        showShopInfo();
        // 第二步：进入选择操作选择界面
        int result = selectOperation();
       //第三步：进入操作项的流程
        executionOperation(result);
    }

    /**
     * 展示自动售药机商品信息
     */
    public void showShopInfo(){
        System.out.println("-----------------------------------------自动售药机-----------------------------------------");
        product.outAllGoodsInfo();
    }

    /**
     * 选择界面,并返回操作码
     * @return
     */
    public int selectOperation(){
        System.out.println("--------------------------------------------------------------------------------");
        System.out.println("1.购买药品");
        System.out.println("2.管理员查询");
        System.out.println("3.返回");
        System.out.println("请选择你要执行操作的序号：");
        int result = scanner.nextInt();
        return result;
    }

    /**
     * 根据输入的不同操作码，执行不同的操作流程
     * @param status
     */
    public void executionOperation(int status){
        //购买药品操作
        if (status == 1){
        firstServer();
        //管理员查询
        }else if (status == 2){
            twoServer();
        //返回，进入第一步
        }else if (status == 3){
            threeServer();
        }
    }
    
    
    public void firstServer(){
        // true while继续执行，false则不执行
        boolean flag = true;
        while (flag) {
            //获取所有的商品名信息，存储方式 k-v
            shopNames = product.getShopNames();
            int result = scanner.nextInt();
            
            //如果自动售药机没有此药，给予提示，并进入重新选择药品界面
            if (!shopNames.containsKey(result) && result != 99) {
                System.out.println("该药品不存在，请重新选择药品");
                continue;
            //设定输入99退出选择界面，返回首页
            }else if (result == 99){
                index();
            //继续选择药品数量
            }else {
                System.out.println("你选择了"+shopNames.get(result).getShopName());
                System.out.println("是否进入下一步，选择购买的数量？（1.继续 2.终止）");
                int i = scanner.nextInt();
                //终止，返回首页
                if (i != 1){
                    index();
                }
                System.out.println("请输入购买得数量：");
                int number = scanner.nextInt();
                System.out.println("你选择了" + number +"盒止痛药。");
                System.out.println("总价格：" + number*shopNames.get(result).getShopPrice() +"元，请投入1元或5元纸币。");
                //输入金额
                double money = scanner.nextDouble();
                //当输入的金额大于钱包的金额，返回首页
                if (money > GoodsData.getUserInstance().getMoney()){
                    System.out.println("你的钱包金额已不足，请充值你的金额！");
                    index();
                }else {
                    System.out.println("你投入的总金额为：" + money);
                }
                System.out.println("确定购买？（1.确定， 2.退款）;");
                int s = scanner.nextInt();
                if (s == 1){
                    UserEntity userInstance = GoodsData.getUserInstance();
                    if (number*shopNames.get(result).getShopPrice() > money){
                        System.out.println("你所付的金额少于你选择的商品总价格，请重新选择药品");
                        continue;
                    }else if (shopNames.get(result).getShopNum() < number){
                        System.out.println("该"+shopNames.get(result).getShopName()+"库存不足，请重新选择药品");
                        continue;
                    }
                    else {
                        System.out.println("你已成功支付，找零：" + (money - number*shopNames.get(result).getShopPrice()) + "元");
                        GoodsData.userEntity.setMoney((int) (userInstance.getMoney() - number*shopNames.get(result).getShopPrice()));
                        System.out.println("你的剩余金额为：" + GoodsData.userEntity.getMoney());
                        //更新库存数量
                        product.updateGoods(shopNames.get(result).getShopName(), number);
                        //返回首页
                        index();
                        flag = false;
                    }
                }else {
                    System.out.println("已成功取消交易");
                    index();
                }
            }
        }
    }
    
    public void twoServer(){
        System.out.println("请输入管理员的密码：");
        String pwd = scanner.next();
        //密码正确
        if (pwd.equals(GoodsData.getUserInstance().getPassWord())){
            product.login();
            int i = scanner.nextInt();
            if (i == 1){
                System.out.println("请选择以下操作：（1.充值金额 2.补货 3.返回）");
                i = scanner.nextInt();
                if (i == 1){
                    System.out.println("请输入你要充值的金额：");
                    int money = scanner.nextInt();
                    //金额充值
                    product.insertMoney(money);
                    //返回首界面
                    index();
                }else if ( i == 2){
                    System.out.println("请输入你要补货的商品名称：");
                    String name = scanner.next();
                    System.out.println("请输入你要补货的数量：");
                    int money = scanner.nextInt();
                    //金额充值
                    boolean b = product.insertShop(name, money);
                    if (!b){
                        System.out.println("输入的商品不存在！");
                        //返回首页
                        index();
                    }
                    //返回首界面
                    index();
                }else {
                    //返回
                    index();
                }
            }else {
                index();
            }
        }else {
            System.out.println("密码错误！请选择以下操作：(1.重新输入密码 2.返回首界面)");
            int i = scanner.nextInt();
            if (i == 1){
                threeServer();
            }else {
                index();
            }
        }
    }
    
    public void threeServer(){
        index();
    }
}
